package persistentie;

import domein.*;
import com.mysql.jdbc.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.HashMap;

/**
 *
 * @author Robin
 */
public class ChatMapper extends AbstractMapper<Integer, ChatMessage> {

    //SQL
    private final static String GEEFALLECHATMESSAGES = "SELECT * FROM Chat ORDER BY webinarID";
    private final static String GEEFCHATWEBINAR = "SELECT g.voornaam, g.familienaam, C.tekst FROM Chat C JOIN Gebruiker g ON C.gebruikerID=g.gebruikerID WHERE C.webinarID=? ORDER BY C.chatID";
    private final static String VOEGCHATTOE = "INSERT INTO Chat (gebruikerID, webinarID, tekst) VALUES (?,?,?)";

    @Override
    public HashMap<Integer, ChatMessage> geefMap() {
        HashMap<Integer, ChatMessage> chatMessages = new HashMap<Integer, ChatMessage>();

        try {
            PreparedStatement ps = (PreparedStatement) DbConnection.getInstance().getConnection().prepareStatement(GEEFALLECHATMESSAGES);
            ResultSet rs = ps.executeQuery();



            while (rs.next()) {

                int chatID = rs.getInt("chatID");
                int gebruikerID = rs.getInt("gebruikerID");
                int webinarID = rs.getInt("webinarID");
                String message = rs.getString("tekst");
                ChatMessage c = new ChatMessage(chatID, gebruikerID, webinarID, message);
                chatMessages.put(Integer.valueOf(chatID), c);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
        return chatMessages;
    }

    @Override
    public ArrayList<String> geefChatWebinar(int webid) {
        ArrayList<String> gebruikers = new ArrayList<String>();
        try {
            PreparedStatement ps = (PreparedStatement) DbConnection.getInstance().getConnection().prepareStatement(GEEFCHATWEBINAR);
            ps.setInt(1, webid);
            ResultSet rs = ps.executeQuery();

            while (rs.next()) {
                String voornaam = rs.getString("g.voornaam");
                String familienaam = rs.getString("g.familienaam");
                String tekst = rs.getString("C.tekst");

                String message = voornaam + " " + familienaam + " zegt: " + tekst;
                gebruikers.add(message);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
        return gebruikers;
    }

    @Override
    public void voegChatToe(ChatMessage message) {
        try {
            PreparedStatement ps = (PreparedStatement) DbConnection.getInstance().getConnection().prepareStatement(VOEGCHATTOE);
            ps.setInt(1, message.getGebruikerID());
            ps.setInt(2, message.getWebinarID());
            ps.setString(3, message.getTekst());
            ps.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
